package com.hhq.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * @brief 这是自定义的注解，可以 @ViewFun(path="/", method="get") 这样添加到方法前面
 */
@Target(value= {ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ViewFun {
    /*定义注解里面的参数信息*/
    String path();     // HTTP  路径
    String method();   // HTTP 方法 ， get、post等
}

/**

@Target : 即该注解可以声明在哪些目标元素之前，也可理解为注释类型的程序元素的种类。
ElementType.PACKAGE：该注解只能声明在一个包名前。 
ElementType.ANNOTATION_TYPE：该注解只能声明在一个注解类型前。 
ElementType.TYPE：该注解只能声明在一个类前。
ElementType.CONSTRUCTOR：该注解只能声明在一个类的构造方法前。
ElementType.LOCAL_VARIABLE：该注解只能声明在一个局部变量前。
ElementType.METHOD：该注解只能声明在一个类的方法前。
ElementType.PARAMETER：该注解只能声明在一个方法参数前。
ElementType.FIELD：该注解只能声明在一个类的字段前。 


@Retention(value = RetentionPolicy.RUNTIME)
按生命周期来划分可分为3类：
1、SOURCE：注解只保留在源文件，当Java文件编译成class文件的时候，注解被遗弃；
2、CLASS：注解被保留到class文件，但jvm加载class文件时候被遗弃，这是默认的生命周期；
3、RUNTIME：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在；
这3个生命周期分别对应于：Java源文件(.java文件) —> .class文件 —> 内存中的字节码。 

 */